From dcb5f3df82fcfec48aab356252067dc897fb98cf Mon Sep 17 00:00:00 2001
From: Alexey Sokolov <alexey+znc@asokolov.org>
Date: Sun, 14 Nov 2021 00:45:01 +0000
Subject: [PATCH] Fix build with libressl

It got another feature of openssl implemented, which broke this

Downloaded from upstream commit
https://github.com/znc/znc/commit/dcb5f3df82fcfec48aab356252067dc897fb98cf

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
---
 CMakeLists.txt                   | 14 ++++++++++++++
 include/znc/zncconfig.h.cmake.in |  1 +
 modules/schat.cpp                |  3 +--
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 0913ff2691..1f77f5632b 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -82,6 +82,20 @@ endmacro()
 tristate_option(OPENSSL "Support SSL")
 if(WANT_OPENSSL)
 	find_package(OpenSSL ${TRISTATE_OPENSSL_REQUIRED})
+
+	if(OPENSSL_FOUND)
+		# SSL_SESSION was made opaque in OpenSSL 1.1.0;
+		# LibreSSL gained that function later too.
+		# TODO: maybe remove this check at some point, and stop supporting old
+		# libssl versions
+		function(check_SSL_SESSION_get0_cipher)
+			set(CMAKE_REQUIRED_LIBRARIES ${OPENSSL_LIBRARIES})
+			set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR})
+			check_cxx_symbol_exists(SSL_SESSION_get0_cipher openssl/ssl.h
+				HAVE_SSL_SESSION_get0_cipher)
+		endfunction()
+		check_SSL_SESSION_get0_cipher()
+	endif()
 endif()
 set(HAVE_LIBSSL "${OPENSSL_FOUND}")
 
diff --git a/include/znc/zncconfig.h.cmake.in b/include/znc/zncconfig.h.cmake.in
index 5426b828af..7b07b99aec 100644
--- a/include/znc/zncconfig.h.cmake.in
+++ b/include/znc/zncconfig.h.cmake.in
@@ -31,6 +31,7 @@
 #define HAVE_PTHREAD 1
 #cmakedefine HAVE_THREADED_DNS 1
 #cmakedefine HAVE_LIBSSL 1
+#cmakedefine HAVE_SSL_SESSION_get0_cipher 1
 #cmakedefine HAVE_IPV6 1
 #cmakedefine HAVE_ZLIB 1
 #cmakedefine HAVE_I18N 1
diff --git a/modules/schat.cpp b/modules/schat.cpp
index aa7a338dcd..66e67e695c 100644
--- a/modules/schat.cpp
+++ b/modules/schat.cpp
@@ -25,8 +25,7 @@
 #include <znc/User.h>
 #include <znc/IRCNetwork.h>
 
-#if !defined(OPENSSL_VERSION_NUMBER) || defined(LIBRESSL_VERSION_NUMBER) || \
-    OPENSSL_VERSION_NUMBER < 0x10100007
+#ifndef HAVE_SSL_SESSION_get0_cipher
 /* SSL_SESSION was made opaque in OpenSSL 1.1.0, cipher accessor was added 2
 weeks before the public release.
 See openssl/openssl@e92813234318635639dba0168c7ef5568757449b. */
